์น์ด์ ๋ธ๋ฆฌ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํ์ํฉ๋๋ค. try-catch ๋ฉ์ปค๋์ฆ, ๊ตฌํ ์ธ๋ถ ์ ๋ณด, ์ด์ ๋ฐ ์ ์ธ๊ณ์ ์ผ๋ก ๊ฐ๋ ฅํ๊ณ ์์ ํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ์ ์ํ ์ค์ ์์ ๋ฅผ ์ดํดํ์ธ์.
์น์ด์ ๋ธ๋ฆฌ ์์ธ ์ฒ๋ฆฌ: Try-Catch ๊ตฌํ์ ๋ํ ์ฌ์ธต ๋ถ์
์น์ด์ ๋ธ๋ฆฌ(Wasm)๋ ์น ๋ธ๋ผ์ฐ์ ์ ๊ทธ ์ด์์์ ๋ค์ดํฐ๋ธ์ ๊ฐ๊น์ด ์ฑ๋ฅ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฐ๋ ฅํ ๊ธฐ์ ๋ก ๋ถ์ํ์ต๋๋ค. ํ์ง๋ง Wasm ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ค๋ฅ์ ์์ธ๋ฅผ ๋ค๋ฃจ๋ ๊ฒ์ ๋ ํนํ ๊ณผ์ ๋ฅผ ์ ์ํฉ๋๋ค. ์ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ์น์ด์ ๋ธ๋ฆฌ์ ์์ธ ์ฒ๋ฆฌ์ ๋ณต์ก์ฑ์ ๊น์ด ํ๊ณ ๋ค์ด `try-catch` ๋ฉ์ปค๋์ฆ, ๊ทธ ๊ตฌํ ๋ฐฉ์, ๊ทธ๋ฆฌ๊ณ ์ ์ธ๊ณ์ ์ผ๋ก ๊ฐ๋ ฅํ๊ณ ์์ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํ ์ค์ฉ์ ์ธ ๊ณ ๋ ค ์ฌํญ์ ์ด์ ์ ๋ง์ถฅ๋๋ค.
์น์ด์ ๋ธ๋ฆฌ์์ ์์ธ ์ฒ๋ฆฌ๊ฐ ํ์ํ ์ด์
์น์ด์ ๋ธ๋ฆฌ๋ฅผ ํตํด ๊ฐ๋ฐ์๋ C++, Rust, Go์ ๊ฐ์ ์ธ์ด๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ์์ ์ง์ ์คํํ ์ ์์ต๋๋ค. ์ด๋ ์๋นํ ์ฑ๋ฅ ํฅ์์ ์ ๊ณตํ์ง๋ง, ๋ค์ดํฐ๋ธ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์๊ณผ ์ ์ฌํ๊ฒ ํจ๊ณผ์ ์ธ ์ค๋ฅ ๊ด๋ฆฌ์ ํ์์ฑ์ ๋์ ํฉ๋๋ค. ํฌ๊ด์ ์ธ ์ค๋ฅ ์ฒ๋ฆฌ๊ฐ ์์ผ๋ฉด ์๊ธฐ์น ์์ ๋์, ๋ณด์ ์ทจ์ฝ์ , ๊ทธ๋ฆฌ๊ณ ์ข์ง ์์ ์ฌ์ฉ์ ๊ฒฝํ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ์ด๋ ์ฌ์ฉ์๊ฐ ๋ค์ํ ์ฅ์น์ ๋คํธ์ํฌ ์กฐ๊ฑด์์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์์กดํ๋ ๊ธ๋ก๋ฒ ํ๊ฒฝ์์ ํนํ ์ค์ํฉ๋๋ค.
์์ธ ์ฒ๋ฆฌ์ ์ค์์ฑ์ ๊ฐ์กฐํ๋ ๋ค์ ์๋๋ฆฌ์ค๋ฅผ ๊ณ ๋ คํด ๋ณด์ญ์์ค:
- ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ: ์ ์์ ์ธ ์ ๋ ฅ์ผ๋ก ์ธํด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ถฉ๋ํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ค๋ฉด ์ ๋ ฅ ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ์ค์ํฉ๋๋ค. `try-catch` ๋ธ๋ก์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ค์ ๋ฐ์ํ๋ ์์ธ๋ฅผ ์ฒ๋ฆฌํ์ฌ ์ฌ์ฉ์์๊ฒ ๋ฌธ์ ๋ฅผ ์ ์์ ์ผ๋ก ์๋ฆด ์ ์์ต๋๋ค.
- ๋ฆฌ์์ค ๊ด๋ฆฌ: ๋ฉ๋ชจ๋ฆฌ ๋ฐ ์ธ๋ถ ๋ฆฌ์์ค๋ฅผ ์ ์ ํ๊ฒ ๊ด๋ฆฌํ๋ ๊ฒ์ ์์ ์ฑ๊ณผ ๋ณด์์ ํ์์ ์ ๋๋ค. ํ์ผ ์ ์ถ๋ ฅ ๋๋ ๋คํธ์ํฌ ์์ฒญ ์ค ๋ฐ์ํ๋ ์ค๋ฅ๋ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐ ๊ธฐํ ์ทจ์ฝ์ ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ ์คํ๊ฒ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์์ ํตํฉ: ์๋ฐ์คํฌ๋ฆฝํธ์ ์ํธ ์์ฉํ ๋ Wasm ๋ชจ๋๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ์์ชฝ์์ ๋ฐ์ํ๋ ์์ธ๋ฅผ ์ํํ๊ฒ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค. ๊ฐ๋ ฅํ ์์ธ ์ฒ๋ฆฌ ์ ๋ต์ ์ค๋ฅ๊ฐ ํจ๊ณผ์ ์ผ๋ก ํฌ์ฐฉ๋๊ณ ๋ณด๊ณ ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
- ํฌ๋ก์คํ๋ซํผ ํธํ์ฑ: ์น์ด์ ๋ธ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ์ข ๋ค์ํ ํ๋ซํผ์์ ์คํ๋ฉ๋๋ค. ์ผ๊ด๋ ์ค๋ฅ ์ฒ๋ฆฌ๋ ์ฌ๋ฌ ๋ธ๋ผ์ฐ์ ์ ์ด์ ์ฒด์ ์์ ์ผ๊ด๋ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณด์ฅํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
์น์ด์ ๋ธ๋ฆฌ์์ Try-Catch์ ๊ธฐ๋ณธ
๋ง์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ฐ๋ฐ์์๊ฒ ์ต์ํ `try-catch` ๋ฉ์ปค๋์ฆ์ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ตฌ์กฐํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์น์ด์ ๋ธ๋ฆฌ์์๋ ๊ตฌํ ๋ฐฉ์์ด Wasm ๋ชจ๋์ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋๊ตฌ์ ๊ธฐ๋ณธ ์ธ์ด์ ํฌ๊ฒ ์์กดํฉ๋๋ค.
ํต์ฌ ๊ฐ๋ :
- `try` ๋ธ๋ก: ์์ธ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ ์ฝ๋๋ฅผ ๊ฐ์๋๋ค.
- `catch` ๋ธ๋ก: ์์ธ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ์ด๋ฅผ ์ฒ๋ฆฌํ๋ ์ฝ๋๋ฅผ ํฌํจํฉ๋๋ค.
- ์์ธ ๋ฐ์์ํค๊ธฐ: ์์ธ๋ ์ธ์ด๋ณ ๊ตฌ๋ฌธ(์: C++์ `throw`)์ ์ฌ์ฉํ์ฌ ๋ช ์์ ์ผ๋ก ๋ฐ์์ํค๊ฑฐ๋, ๋ฐํ์์ ์ํด ์์์ ์ผ๋ก(์: 0์ผ๋ก ๋๋๊ธฐ ๋๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์๋ฐ) ๋ฐ์ํ ์ ์์ต๋๋ค.
๊ตฌํ์ ๋ค์์ฑ: Wasm์์์ `try-catch` ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ํด์ฒด์ธ๊ณผ ๋์ ์น์ด์ ๋ธ๋ฆฌ ๋ฐํ์์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค:
- Emscripten: C/C++๋ฅผ ์น์ด์ ๋ธ๋ฆฌ๋ก ์ปดํ์ผํ๋ ์ธ๊ธฐ ์๋ ํด์ฒด์ธ์ธ Emscripten์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ๊ด๋ฒ์ํ๊ฒ ์ง์ํฉ๋๋ค. C++์ `try-catch` ๋ธ๋ก์ Wasm ๊ตฌ๋ฌธ์ผ๋ก ๋ณํํฉ๋๋ค.
- wasm-bindgen: ์ฃผ๋ก Rust์ ์ฌ์ฉ๋๋ wasm-bindgen์ ์๋ฐ์คํฌ๋ฆฝํธ-Wasm ๊ฒฝ๊ณ๋ฅผ ๋์ด ์ ํ๋๋ ์์ธ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค.
- ์ฌ์ฉ์ ์ ์ ๊ตฌํ: ๊ฐ๋ฐ์๋ ์ฌ์ฉ์ ์ ์ ์ค๋ฅ ์ฝ๋์ ์ํ ํ์ธ์ ์ฌ์ฉํ์ฌ Wasm ๋ชจ๋ ๋ด์ ์์ฒด ์์ธ ์ฒ๋ฆฌ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํ ์ ์์ต๋๋ค. ์ด๋ ๋ ์ผ๋ฐ์ ์ด์ง๋ง ๊ณ ๊ธ ์ฌ์ฉ ์ฌ๋ก์์๋ ํ์ํ ์ ์์ต๋๋ค.
์ฌ์ธต ๋ถ์: Emscripten๊ณผ ์์ธ ์ฒ๋ฆฌ
Emscripten์ C/C++ ์ฝ๋๋ฅผ ์ํ ๊ฐ๋ ฅํ๊ณ ๊ธฐ๋ฅ์ด ํ๋ถํ ์์ธ ์ฒ๋ฆฌ ์์คํ ์ ์ ๊ณตํฉ๋๋ค. ์ฃผ์ ์ธก๋ฉด์ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
1. ์ปดํ์ผ๋ฌ ์ง์
Emscripten์ ์ปดํ์ผ๋ฌ๋ C++ `try-catch` ๋ธ๋ก์ ์ง์ Wasm ๋ช ๋ น์ด๋ก ๋ณํํฉ๋๋ค. ์คํ๊ณผ ์ธ์์ธ๋ฉ์ ๊ด๋ฆฌํ์ฌ ์์ธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌ๋๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ด๋ ๊ฐ๋ฐ์๊ฐ ํ์ค ์์ธ ์ฒ๋ฆฌ๋ก C++ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์ด๋ฅผ Wasm์ผ๋ก ์ํํ๊ฒ ๋ณํํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
2. ์์ธ ์ ํ
Emscripten์ Wasm ๋ชจ๋ ๋ด์์ ๋ฐ์ํ๋ ์์ธ์ ์ ํ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. `try` ๋ธ๋ก ๋ด์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ๋ฐํ์์ ์คํ์ ํ๋ฉด์ ์ผ์นํ๋ `catch` ๋ธ๋ก์ ์ฐพ์ต๋๋ค. Wasm ๋ชจ๋ ๋ด์์ ์ ์ ํ ํธ๋ค๋ฌ๋ฅผ ์ฐพ์ผ๋ฉด ์์ธ๋ ๊ทธ๊ณณ์์ ์ฒ๋ฆฌ๋ฉ๋๋ค. ํธ๋ค๋ฌ๋ฅผ ์ฐพ์ง ๋ชปํ๋ฉด Emscripten์ ์์ธ๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ณด๊ณ ํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๊ฑฐ๋ ๊ธฐ๋กํ ์ ์๋๋ก ํฉ๋๋ค.
3. ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐ ๋ฆฌ์์ค ์ ๋ฆฌ
Emscripten์ ์์ธ ์ฒ๋ฆฌ ์ค์ ๋์ ์ผ๋ก ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ๋ฆฌ์์ค๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ํด์ ๋๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ปดํ์ผ๋ฌ๋ ์์ธ๊ฐ Wasm ๋ชจ๋ ๋ด์์ ์ฒ๋ฆฌ๋์ง ์๋๋ผ๋ ์์ธ ๋ฐ์ ์ ๋ฆฌ์์ค๋ฅผ ์ ๋ฆฌํ๋ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
4. ์๋ฐ์คํฌ๋ฆฝํธ ์ํธ์์ฉ
Emscripten์ Wasm ๋ชจ๋์ด ์๋ฐ์คํฌ๋ฆฝํธ์ ์ํธ ์์ฉํ ์ ์๋๋ก ํ์ฌ Wasm์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก, ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฐ๋๋ก ์์ธ๊ฐ ์ ํ๋ ์ ์๊ฒ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๋ค์ํ ์์ค์์ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์์ธ์ ๋ฐ์ํ๋ ์ต์์ ๋ฐฉ๋ฒ์ ์ ํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ฐ์คํฌ๋ฆฝํธ๋ Wasm ํจ์์์ ๋ฐ์ํ ์์ธ๋ฅผ ํฌ์ฐฉํ์ฌ ์ฌ์ฉ์์๊ฒ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํ์ํ ์ ์์ต๋๋ค.
์์ : Emscripten์ ์ฌ์ฉํ C++
๋ค์์ Emscripten์ผ๋ก ์ปดํ์ผ๋ C++ ์ฝ๋์์ ์์ธ ์ฒ๋ฆฌ๊ฐ ์ด๋ป๊ฒ ๋ณด์ผ ์ ์๋์ง์ ๋ํ ๊ธฐ๋ณธ ์์ ์ ๋๋ค:
#include <iostream>
#include <stdexcept>
extern "C" {
int divide(int a, int b) {
try {
if (b == 0) {
throw std::runtime_error("Division by zero!");
}
return a / b;
} catch (const std::runtime_error& e) {
std::cerr << "Exception: " << e.what() << std::endl;
return -1; // Indicate an error
}
}
}
์ด ์์ ์์ `divide` ํจ์๋ 0์ผ๋ก ๋๋๋ ๊ฒฝ์ฐ๋ฅผ ํ์ธํฉ๋๋ค. ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด `std::runtime_error` ์์ธ๋ฅผ ๋ฐ์์ํต๋๋ค. `try-catch` ๋ธ๋ก์ ์ด ์์ธ๋ฅผ ์ฒ๋ฆฌํ์ฌ ์ฝ์์ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๊ณ (Emscripten ํ๊ฒฝ์์๋ ๋ธ๋ผ์ฐ์ ์ฝ์๋ก ๋ฆฌ๋๋ ์ ๋จ) ์ค๋ฅ ์ฝ๋๋ฅผ ๋ฐํํฉ๋๋ค. ์ด๋ Emscripten์ด ํ์ค C++ ์์ธ ์ฒ๋ฆฌ๋ฅผ ์น์ด์ ๋ธ๋ฆฌ๋ก ์ด๋ป๊ฒ ๋ณํํ๋์ง๋ฅผ ๋ณด์ฌ์ค๋๋ค.
wasm-bindgen๊ณผ Rust๋ฅผ ์ด์ฉํ ์์ธ ์ฒ๋ฆฌ
Rust ๊ฐ๋ฐ์์๊ฒ `wasm-bindgen`์ ์น์ด์ ๋ธ๋ฆฌ ๋ชจ๋์ ์์ฑํ๊ธฐ ์ํ ํต์ฌ ๋๊ตฌ์ ๋๋ค. ์์ธ ์ฒ๋ฆฌ์ ๋ํ ๊ณ ์ ํ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค:
1. ํจ๋ ์ฒ๋ฆฌ
Rust๋ ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅํ ์ค๋ฅ๋ฅผ ๋ํ๋ด๊ธฐ ์ํด `panic!` ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํฉ๋๋ค. `wasm-bindgen`์ Rust ํจ๋์ ์ฒ๋ฆฌํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํจ๋์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ถฉ๋์ํต๋๋ค. `wasm-bindgen`์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ด ๋์์ ์์ ํ ์ ์์ต๋๋ค.
2. ์ค๋ฅ ์ ํ
`wasm-bindgen`์ Rust์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ค๋ฅ๋ฅผ ์ ํํ ์ ์๊ฒ ํฉ๋๋ค. ์ด๋ Rust ๋ชจ๋์ ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํตํฉํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. Rust ํจ์์์ `Result` ํ์ ์ ์ฌ์ฉํ์ฌ ์ฑ๊ณต์ ์ธ ๊ฐ ๋๋ ์ค๋ฅ๋ฅผ ๋ฐํํ ์ ์์ต๋๋ค. `wasm-bindgen`์ ์ด๋ฌํ `Result` ํ์ ์ ์๋์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๋ฏธ์ค๋ก ๋ณํํ์ฌ ์ ์ฌ์ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ํ์ค์ ์ด๊ณ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
3. ์ค๋ฅ ํ์ ๊ณผ ์ฌ์ฉ์ ์ ์ ์ค๋ฅ ์ฒ๋ฆฌ
Rust์์ ์ฌ์ฉ์ ์ ์ ์ค๋ฅ ํ์ ์ ์ ์ํ๊ณ `wasm-bindgen`๊ณผ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ ๋ ๊ตฌ์ฒด์ ์ธ ์ค๋ฅ ์ ๋ณด๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ด๋ ์ต์ข ์ฌ์ฉ์๋ฅผ ์ํด ๋ค๋ฅธ ์ธ์ด๋ก ๋ฒ์ญ๋ ์ ์๋ ์์ธํ ์ค๋ฅ ๋ณด๊ณ ์๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ฏ๋ก ๊ธ๋ก๋ฒํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
4. ์์ : wasm-bindgen์ ์ฌ์ฉํ Rust
๊ธฐ๋ณธ์ ์ธ ์์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
// src/lib.rs
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn add(a: i32, b: i32) -> Result<i32, JsValue> {
if a + b >= i32::MAX {
return Err(JsValue::from_str("Overflow occurred!"));
}
Ok(a + b)
}
์ด Rust ์ฝ๋์์ `add` ํจ์๋ ์ ์ฌ์ ์ธ ์ ์ ์ค๋ฒํ๋ก๋ฅผ ํ์ธํฉ๋๋ค. ์ค๋ฒํ๋ก๊ฐ ๋ฐ์ํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ ํฌํจํ๋ `Result::Err`๋ฅผ ๋ฐํํฉ๋๋ค. `wasm-bindgen` ๋๊ตฌ๋ ์ด๋ฅผ ์ฑ๊ณต ๊ฐ์ผ๋ก ํด๊ฒฐ๋๊ฑฐ๋ ์ค๋ฅ ๊ฐ์ผ๋ก ๊ฑฐ๋ถ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๋ฏธ์ค๋ก ๋ณํํฉ๋๋ค.
์ด๋ฅผ ์ฌ์ฉํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
// index.js
import * as wasm from './pkg/your_wasm_module.js';
async function run() {
try {
const result = await wasm.add(2147483647, 1);
console.log("Result:", result);
} catch (error) {
console.error("Error:", error);
}
}
run();
์ด ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ wasm ๋ชจ๋์ ๊ฐ์ ธ์ `add` ํจ์๋ฅผ ํธ์ถํฉ๋๋ค. `try-catch` ๋ธ๋ก์ ์ฌ์ฉํ์ฌ ์ ์ฌ์ ์ธ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๊ฒฐ๊ณผ๋ ์ค๋ฅ๋ฅผ ๊ธฐ๋กํฉ๋๋ค.
๊ณ ๊ธ ์์ธ ์ฒ๋ฆฌ ๊ธฐ๋ฒ
1. ์ฌ์ฉ์ ์ ์ ์ค๋ฅ ํ์ ๊ณผ ์ด๊ฑฐํ(Enum)
์ข ์ข ์ด๊ฑฐํ(enum)์ผ๋ก ๊ตฌํ๋๋ ์ฌ์ฉ์ ์ ์ ์ค๋ฅ ํ์ ์ ์ฌ์ฉํ์ฌ ํธ์ถํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ ๋ ๊ตฌ์ฒด์ ์ธ ์ค๋ฅ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ธ์. ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์๊ฐ ์ค๋ฅ๋ฅผ ๋ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ํนํ ๊ตญ์ ํ(i18n) ๋ฐ ํ์งํ(l10n)์ ์ ์ฉํ๋ฉฐ, ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํน์ ์ง์ญ ๋ฐ ์ธ์ด์ ๋ง๊ฒ ๋ฒ์ญํ๊ณ ์กฐ์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ด๊ฑฐํ์ `InvalidInput`, `NetworkError`, `FileNotFound`์ ๊ฐ์ ์ผ์ด์ค๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ๊ฐ ์ผ์ด์ค๋ ํน์ ์ค๋ฅ์ ๊ด๋ จ๋ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
2. ์ฒ๋ฆฌ๋์ง ์์ ์์ธ ์ฒ๋ฆฌ
์๋ฐ์คํฌ๋ฆฝํธ์ `try-catch` ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ Wasm ๋ชจ๋์์ ๋ฐ์ํ๋ ์์ธ๋ฅผ ํฌ์ฐฉํ์ธ์. ์ด๋ ์ฒ๋ฆฌ๋์ง ์์ ์ค๋ฅ๋ Wasm ๋ชจ๋ ๋ด์์ ๋ช ์์ ์ผ๋ก ํฌ์ฐฉ๋์ง ์์ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ์ด๋ ์์ ํ ๋ง๊ฐ์ง ์ฌ์ฉ์ ๊ฒฝํ์ ๋ฐฉ์งํ๊ณ , ๋์ฒด ์ ๋ต์ ์ ๊ณตํ๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด ํ์ด์ง๋ฅผ ์ถฉ๋์ํฌ ์ ์๋ ์๊ธฐ์น ์์ ์ค๋ฅ๋ฅผ ๊ธฐ๋กํ๋ ๋ฐ ์ค์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ด๋ฅผ ํตํด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ผ๋ฐ์ ์ธ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํ์ํ๊ฑฐ๋ Wasm ๋ชจ๋์ ๋ค์ ์์ํ๋๋ก ์๋ํ ์ ์์ต๋๋ค.
3. ๋ชจ๋ํฐ๋ง ๋ฐ ๋ก๊น
Wasm ๋ชจ๋ ์คํ ์ค์ ๋ฐ์ํ๋ ์์ธ์ ์ค๋ฅ๋ฅผ ์ถ์ ํ๊ธฐ ์ํด ๊ฐ๋ ฅํ ๋ก๊น ๋ฉ์ปค๋์ฆ์ ๊ตฌํํ์ธ์. ๋ก๊ทธ ์ ๋ณด์๋ ์์ธ ์ ํ, ๋ฐ์ ์์น ๋ฐ ๊ด๋ จ ์ปจํ ์คํธ๊ฐ ํฌํจ๋ฉ๋๋ค. ๋ก๊ทธ ์ ๋ณด๋ ๋๋ฒ๊น , ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ๋ฐ ์ ์ฌ์ ์ธ ๋ณด์ ๋ฌธ์ ๋ฅผ ์๋ฐฉํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ด๋ฅผ ์ค์ ์ง์ค์ ๋ก๊น ์๋น์ค์ ํตํฉํ๋ ๊ฒ์ ํ๋ก๋์ ํ๊ฒฝ์์ ํ์์ ์ ๋๋ค.
4. ์ฌ์ฉ์์๊ฒ ์ค๋ฅ ๋ณด๊ณ
์ฌ์ฉ์์๊ฒ ์ ์ ํ๊ณ ์ฌ์ฉ์ ์นํ์ ์ธ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ๋ณด๊ณ ํด์ผ ํฉ๋๋ค. ๋ด๋ถ ๊ตฌํ ์ธ๋ถ ์ ๋ณด๋ฅผ ๋ ธ์ถํ์ง ๋ง์ญ์์ค. ๋์ , ์ค๋ฅ๋ฅผ ๋ ์ดํดํ๊ธฐ ์ฌ์ด ๋ฉ์์ง๋ก ๋ณํํ์ธ์. ์ด๋ ์ต์์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ฐ ์ค์ํ๋ฉฐ, ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ์ธ์ด๋ก ๋ฒ์ญํ ๋ ๋ฐ๋์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ํต์ฌ ๋ถ๋ถ์ผ๋ก ์๊ฐํ๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋ ์ฌ์ฉ์์๊ฒ ์ ์ฉํ ํผ๋๋ฐฑ์ ์ ๊ณตํ์ธ์.
5. ๋ฉ๋ชจ๋ฆฌ ์์ ๋ฐ ๋ณด์
๋ฉ๋ชจ๋ฆฌ ์์ ๋ฐ ๋ณด์ ์ทจ์ฝ์ ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ ์ ํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ์ ์ ๊ตฌํํ์ธ์. ์ ์ ๋ถ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ Wasm ์ฝ๋์ ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ํตํฉํ์ธ์. ์ด๋ ์ฌ์ฉ์ ์ ๋ ฅ, ๋คํธ์ํฌ ์์ฒญ ๋ฐ ํธ์คํธ ํ๊ฒฝ๊ณผ์ ์ํธ ์์ฉ์ ์ฒ๋ฆฌํ ๋ ํนํ ์ค์ํฉ๋๋ค. ๊ธ๋ก๋ฒํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ ์นจํด๋ ํ๊ดด์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค.
์ค์ฉ์ ์ธ ๊ณ ๋ ค ์ฌํญ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก
1. ์ฌ๋ฐ๋ฅธ ํด์ฒด์ธ ์ ํ
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํ๋ก์ ํธ ์๊ตฌ ์ฌํญ์ ๋ง๋ ํด์ฒด์ธ์ ์ ํํ์ธ์. C/C++์๋ Emscripten, Rust์๋ wasm-bindgen, Go๋ AssemblyScript์ ๊ฐ์ ์ธ์ด์๋ ๋ค๋ฅธ ์ธ์ด๋ณ ํด์ฒด์ธ์ ๊ณ ๋ คํ์ธ์. ํด์ฒด์ธ์ ์์ธ ๊ด๋ฆฌ ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ ํตํฉ์์ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
2. ์ค๋ฅ์ ์ธ๋ถ์ฑ
์์ธํ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ๋ ธ๋ ฅํ์ธ์. ์ด๋ ๋๋ฒ๊น ๋ฐ ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ๋ฌธ์ ์ ๊ทผ๋ณธ ์์ธ์ ์ดํดํ๋ ๋ฐ ๋์์ ์ฃผ๋ ๋ฐ ํนํ ์ค์ํฉ๋๋ค. ์์ธํ ์ ๋ณด๋ ๋ฌธ์ ๋ฅผ ์ ์ํ๊ฒ ์ฐพ์๋ด๊ณ ํด๊ฒฐํ๋ ๊ฒ์ ๋ ์ฝ๊ฒ ๋ง๋ญ๋๋ค. ์ค๋ฅ๊ฐ ๋ฐ์ํ ํจ์, ๊ด๋ จ ๋ณ์์ ๊ฐ ๋ฐ ๊ธฐํ ์ ์ฉํ ์ ๋ณด์ ๊ฐ์ ์ปจํ ์คํธ๋ฅผ ์ ๊ณตํ์ธ์.
3. ํฌ๋ก์คํ๋ซํผ ํธํ์ฑ ํ ์คํธ
๋ค์ํ ๋ธ๋ผ์ฐ์ ์ ํ๋ซํผ์์ Wasm ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ ์ ํ ํ ์คํธํ์ธ์. ์์ธ ์ฒ๋ฆฌ๊ฐ ์ฌ๋ฌ ํ๊ฒฝ์์ ์ผ๊ด๋๊ฒ ์๋ํ๋์ง ํ์ธํ์ธ์. ๋ฐ์คํฌํฑ ๋ฐ ๋ชจ๋ฐ์ผ ์ฅ์น ๋ชจ๋์์ ํ ์คํธํ๊ณ ๋ค์ํ ํ๋ฉด ํฌ๊ธฐ์ ์ด์ ์ฒด์ ๋ฅผ ๊ณ ๋ คํ์ธ์. ์ด๋ ํ๋ซํผ๋ณ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋ค์ํ ๊ธ๋ก๋ฒ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ ๊ฑธ์ณ ์ ๋ขฐํ ์ ์๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
4. ์ฑ๋ฅ ์ํฅ
์์ธ ์ฒ๋ฆฌ์ ์ ์ฌ์ ์ธ ์ฑ๋ฅ ์ํฅ์ ์ ์ํ์ธ์. `try-catch` ๋ธ๋ก์ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ฉด ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๊ฒฌ๊ณ ์ฑ๊ณผ ์ฑ๋ฅ์ ๊ท ํ์ ๋ง์ถ๋๋ก ์์ธ ์ฒ๋ฆฌ ์ ๋ต์ ์ค๊ณํ์ธ์. ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ํ์์ ๋ฐ๋ผ ์ต์ ํํ์ธ์. Wasm ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ธ๊ฐ ๋ฏธ์น๋ ์ํฅ์ ๋ค์ดํฐ๋ธ ์ฝ๋๋ณด๋ค ๋ ํด ์ ์์ผ๋ฏ๋ก ์ค๋ฒํค๋๋ฅผ ์ต์ํํ๋๋ก ์ต์ ํํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค.
5. ๋ฌธ์ํ ๋ฐ ์ ์ง๋ณด์์ฑ
์์ธ ์ฒ๋ฆฌ ์ ๋ต์ ๋ฌธ์ํํ์ธ์. Wasm ๋ชจ๋์ด ๋ฐ์์ํฌ ์ ์๋ ์์ธ ์ ํ, ์ฒ๋ฆฌ ๋ฐฉ๋ฒ ๋ฐ ์ฌ์ฉ๋๋ ์ค๋ฅ ์ฝ๋๋ฅผ ์ค๋ช ํ์ธ์. ์์ ๋ฅผ ํฌํจํ๊ณ ๋ฌธ์๊ฐ ์ต์ ์ํ์ด๋ฉฐ ์ดํดํ๊ธฐ ์ฌ์ด์ง ํ์ธํ์ธ์. ์ค๋ฅ ์ฒ๋ฆฌ ์ ๊ทผ ๋ฐฉ์์ ๋ฌธ์ํํ ๋ ์ฝ๋์ ์ฅ๊ธฐ์ ์ธ ์ ์ง๋ณด์์ฑ์ ๊ณ ๋ คํ์ธ์.
6. ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก
์ทจ์ฝ์ ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ ์ฉํ์ธ์. ๋ชจ๋ ์ฌ์ฉ์ ์ ๋ ฅ์ ์ ์ ํ์ฌ ์ฃผ์ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ์ธ์. ๋ฒํผ ์ค๋ฒํ๋ก ๋ฐ ๊ธฐํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํด ์์ ํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ์ ์ ์ฌ์ฉํ์ธ์. ์ฌ์ฉ์์๊ฒ ๋ฐํ๋๋ ์ค๋ฅ ๋ฉ์์ง์ ๋ด๋ถ ๊ตฌํ ์ธ๋ถ ์ ๋ณด๊ฐ ๋ ธ์ถ๋์ง ์๋๋ก ์ฃผ์ํ์ธ์.
๊ฒฐ๋ก
์์ธ ์ฒ๋ฆฌ๋ ๊ฐ๋ ฅํ๊ณ ์์ ํ ์น์ด์ ๋ธ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. `try-catch` ๋ฉ์ปค๋์ฆ์ ์ดํดํ๊ณ Emscripten, wasm-bindgen ๋ฐ ๊ธฐํ ๋๊ตฌ์ ๋ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ฑํํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ๋ณต์๋ ฅ์ด ๋ฐ์ด๋๊ณ ๊ธ์ ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ Wasm ๋ชจ๋์ ๋ง๋ค ์ ์์ต๋๋ค. ์ฒ ์ ํ ํ ์คํธ, ์์ธํ ๋ก๊น , ๋ณด์์ ๋ํ ์ง์ค์ ์ ์ธ๊ณ์ ์ผ๋ก ์ฐ์ํ ์ฑ๋ฅ์ ๋ฐํํ๊ณ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ๋ณด์๊ณผ ๋์ ์์ค์ ์ฌ์ฉ์ฑ์ ์ ๊ณตํ๋ ์น์ด์ ๋ธ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
์น์ด์ ๋ธ๋ฆฌ๊ฐ ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ดํดํ๋ ๊ฒ์ด ๊ทธ ์ด๋ ๋๋ณด๋ค ์ค์ํด์ก์ต๋๋ค. ์ด๋ฌํ ๊ธฐ์ ์ ์๋ฌํจ์ผ๋ก์จ ํจ์จ์ ์ด๊ณ ์์ ํ๋ฉฐ ์ ๋ขฐํ ์ ์๋ ์น์ด์ ๋ธ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ ์ ์์ต๋๋ค. ์ด ์ง์์ ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉ์์ ์์น๋ ์ฅ์น์ ๊ด๊ณ์์ด ์ง์ ์ผ๋ก ํฌ๋ก์คํ๋ซํผ์ด๊ณ ์ฌ์ฉ์ ์นํ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๋๋ก ํ์ ์ค์ด์ค๋๋ค.